指针声明和定义如何用于指针?

时间:2020-05-05 18:04:24

标签: c pointers

对于以下代码Spinet:

#include <stdio.h>

int main(void) {
    int x = 12345678;
    char *a = x;

    printf("%d\n", x);

    printf("%d\n %d\n %d\n %d\n", a[0], a[1], a[2], a[3]);

    return 0;
}
GNU GCC v7.1.1的

输出: 超时:受监视的命令转储核心 sh:第1行:11792分段故障超时时间为10s main

请注意以下工作:

#include <stdio.h>

int main(void) {
    int x = 12345678;
    char *a;
    *a = x;

    printf("%d\n", x);

    printf("%d\n %d\n %d\n %d\n", a[0], a[1], a[2], a[3]);
    return 0;
}

1 个答案:

答案 0 :(得分:6)

这些都不正确。

在两种情况下,您都将一个整数值分配给一个指针。然后将该值视为有效的内存位置并取消引用。但这不是有效的内存位置,因此您调用undefined behavior

在第一种情况下,UB表现为崩溃,而在第二种情况下,UB表现为正常工作。

您需要做的是将<input (keyup)="searchProducts()" id="productSearch" placeholder="search products..."> <ng-container *ngIf="infinite | async as products"> <cdk-virtual-scroll-viewport itemSize="100" (scrolledIndexChange)="nextBatch($event, (products[products.length - 1].data.productName))"> <div class="product-row" fxLayout="row wrap" fxLayout.xs="column wrap" fxFlexFill fxLayoutAlign="center center"> <div fxFlex.gt-xs="50%" fxFlex.gt-md="30%" *cdkVirtualFor="let p of products; let i = index; trackByIndex"> <mat-card class="product-tile"> <img class="product-thumbnail" src= "{{ p.data.thumbnail }}" [routerLink]="p.id"> <div class="product-brand"> {{ p.id }} </div> <div class="product-details"> <span id="product-name">{{ p.data.productName }}</span> <span id="product-price">{{ p.data.price }}</span> </div> <div class="add-to-pad-button"> <button (click)="openDialog(p.id)" mat-raised-button color="accent">Add to Pad</button> <a href="{{ p.data.link }}" class="mat-raised-button color=accent">Click Me</a> </div> </mat-card> </div> </div> </cdk-virtual-scroll-viewport> </ng-container> 地址分配给x。然后,您可以读取组成a的字节。

int