簡體   English   中英

指針和指向 C 中的指針的指針

[英]pointers & pointer to pointer in C

嘿,我正在嘗試理解指針,但我注意到在我的程序中導致未定義行為的東西在第一種情況下,當我將指向 q1 的指針衰減到 NULL 時,一切都很好,但是當我將指針 *q1 衰減到 NULL 時,終端沒有顯示任何內容。 出了什么問題?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>



int main ()
{
    char *p[11]={"vasilis","loukas","vasilis","vasilis","giorgos","makis","vasilis","nikos","makis","nikos"};
    
    
    char **p1;
    char**d1;
    char**q1;
    q1=NULL;
    p1=&p[0];
    d1=&p[1];
    
    
    
    /******Count words*********/
    int count=0;
    
    for(p1=&p[0] ; *p1 ; p1++)
    {
        count++;
        }
    
    
    printf("\nthe number of words : %d" ,count);
    
    return 0;
}

第二種情況:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>



int main ()
{
    char *p[11]={"vasilis","loukas","vasilis","vasilis","giorgos","makis","vasilis","nikos","makis","nikos"};
    
    
    char **p1;
    char**d1;
    char**q1;
    *q1=NULL;
    p1=&p[0];
    d1=&p[1];
    
    
    
    /******Count words*********/
    int count=0;
    
    for(p1=&p[0] ; *p1 ; p1++)
    {
        count++;
        }
    
    
    printf("\nthe number of words : %d" ,count);
    
    return 0;
}

在您的第一個代碼中, q1 = NULL; line 正在為指針q1分配一個零(null)值,這是一個完全有效的操作(即使該指針可能指向另一個指針)。 實際上,將NULL值分配給指針是一種常用技術,用於測試該指針當前是否包含有效地址(如果它是NULL ,那么我們不能使用它)。

在您的第二個代碼中, *q1 = NULL; ,您正在嘗試將零分配給q1指向的 object (本身就是一個指針); 但是, q1尚未分配值(地址),因此它不指向任何有效目標,並且您的嘗試失敗(因為您正在嘗試修改 memory 的“隨機”部分,您可能不會可使用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM