當前位置:首頁 » 編程語言 » 為什麼c語言指針運行不出來
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

為什麼c語言指針運行不出來

發布時間: 2022-05-10 13:00:20

c語言程序,沒有錯誤,但是運行不出來

  1. 指針開辟空間的方法有問題

  2. 變數用錯,current沒有賦值就用在循環里了。

  3. scanf讀入時的後面是加指針,字元串名本來就是指針,不需要&符號。

  4. 冒泡排序方法有問題。

正確的代碼如下:

#include<stdio.h>

#include<stdlib.h>

#define N 100


int current;

typedef struct student

{

char *num;

char *nam;

float chinese;

float english;

float math;

double average;

float sum;

}STU;

STU stu[N]; //定義結構體數組


void bubbleSort(STU *arr, int n)

{

int i,j;

STU m;

for(i=0;i<n-1;i++)

{

for(j=0;j<n-1-i;j++)

{

if(arr[j].sum < arr[j+1].sum)

{

m=arr[j];

arr[j]=arr[j+1];

arr[j+1]=m;

}

}

}

return;

}


int main(){

int i,t;

printf("請輸入學生人數 : ");

scanf("%d",&t);

for(i=0; i<t; i++){

printf("請輸入學生的學號: ");

stu[i].num = (char *)malloc(sizeof(char)*10);

scanf("%s",stu[i].num);

printf("請輸入學生的姓名: ");

stu[i].nam = (char *)malloc(sizeof(char)*10);

scanf("%s",stu[i].nam);

printf("請輸入學生的語文成績: ");

scanf("%f",&stu[i].chinese);

printf("請輸入學生的數學成績: ");

scanf("%f",&stu[i].math);

printf("請輸入學生的英語成績: ");

scanf("%f",&stu[i].english);

//輸出每個學生的平均成績

stu[i].average=(stu[i].chinese + stu[i].math + stu[i].english)/3.0;

printf("學生%s的平均成績為:%.2f ",stu[i].nam,stu[i].average);

//輸出每個學生的總成績

stu[i].sum=(stu[i].chinese + stu[i].math + stu[i].english);

printf("學生%s的總成績為:%f ",stu[i].nam,stu[i].sum);

} //錄入學生成績

bubbleSort(stu, t);

printf("按總分由高到低輸出學生的信息為: ");

for(i=0; i<t; i++){

printf("學生姓名:%s 學生學號:%s 語文:%f 英語:%f 數學:%f 總分:%.2lf 平均分:%f ",

stu[i].nam,stu[i].num,stu[i].chinese,stu[i].english,stu[i].math,stu[i].sum,stu[i].average);

}

for(i=0; i<t; i++){

free(stu[i].num);

free(stu[i].nam);

}

return 0;

}

❷ C語言指針程序無法運行

#include<stdio.h>

voidmain()
{
inta[3][4],i,j,*p;
p=a[0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",(p+i*4+j));
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%4d",(p+i)[j]);
printf(" ");
}
}

p+i [j] 本身就是一個值而不是指針,你對值加* 自然是不對的。

❸ C語言程序,運行不出來結果

如圖中1處,沒有輸出的豬腰子問題在這里,p的初始值應為a.而不是0,因為之前已經定義了p=a這里可以改成for(;p<a+5;p++)。

另外第二處經過for循環,p已經指向數組的下一個地址,此時輸出值不確定。這里沒有語法錯誤。需要注意就是。

❹ C語言指針使用問題

答案沒錯的,是你理解錯了,這里不是要把r替換為s。
重點看這段代碼:
if(*p==ch)
{
*str=*p;
(*str)++;
str++;
}
這里的意思是當p指向的字元和ch相等時,將str所指向的字元變為ch,然後再++對應這里也就是先變為r然後變為s,str++表示str指向下一個字元。這里的str一開始是指向program中的p字元,然後當p指針指向r字元時,str還是指向p字元,接著str將p字元改為r,然後又++改為s。接著p指針繼續向下移動,一直到第二個r,然而此時的str是指向program中的第二個元素也就是r,然後重復和之前一樣的步驟變為s。最後跳出循環後,*str='\0';表示截斷。
哦,還有就是你第一個程序寫錯了,scanf函數要的是指針,不是scanf("%c",char_c);這樣的。char_c是個變數名,應該scanf("%c",&char_c);

That'all

❺ 為什麼c語言指針那麼難

指針確實難於理解。指針具有兩個身份:

第一,指針本身是一個變數。只要是是變數,它就佔用內存地址。當然如果沒有分配內存地址,不在其內。

第二,指針包含一定的一個內容。指針所特殊的就是,他的內容保存的是其他變數的地址。

以上兩點可以通過書中的示例7-7有比較好的體現。

例如,定義指針變數intp1。 intp1=&a 就表示 intp1保存的信息為a的地址。
而*intp1表示是intp1所保存地址的內存單元所保存的值,實際就是a的值。

所以,你給出的 *intp1=&a; 是一種不太合適寫法。我們可以這樣假設,再給一個變數b。令*intp1=b=&a,則
b=&a,說明b保存的a的地址,這樣b就是一個指針。那*intp1=b,則說明 intp1所保存的地址指向的內存單元為b。所以,intp1可以看成a的指針的指針。

上面這個例子比較繞,慢慢想想,就理解了。

❻ 一個c語言指針交換無法運行問題

你把整型數值賦給了指針變數了,所以發生錯誤。應在主函數里改成p1=&a,p2=&b。

❼ c語言指針問題,為什麼我輸入很多個都沒有顯示錯誤

因為C語言不提供內存越界訪問檢查機制,p在堆內存上申請了一個char長度空間(注意:malloc實際分配的內存有可能比請求的稍微多一點,但是這個行為是由編譯器定義的,所以不能指望它肯定會分配比請求更多的內存)。
你在隨後輸入一個字元串時候,通過scanf函數讀取到p指針指向的內存中,雖然只申請了一個位元組空間,但其後的內存因為(通常)不是非法地址,所以也能被操作。
這個錯誤在實際軟體開發時,經常會發生且不容易發現。假如操作的越界內存是一塊非法地址,程序將會終止。這個錯誤在unix/linux系統上稱為「段錯誤」。它提示程序試圖訪問一個並未分配給程序的內存位置。這還屬於比較好的情形,最可怕的是:如果這個越界的地址是一個合法地址(如你的例子中),接下來,如果有其他變數正在使用這塊內存,其中的值被無意修改了,並且這種錯誤很難發現。所以對指針的操作要異常小心。
另外你可以試試,即使定義這個p指針為
char
p[1];棧中內存,也能進行錯誤操作如:
12345678p[-1] = 'l'; //「錯誤操作」p[0] = 'o';p[1] = 'v'; //「錯誤操作」p[2] = 'e'; //「錯誤操作」char *temp = p; --temp; printf("%s\n", p); //列印 oveprintf("%s\n", temp); //將列印 love

❽ 在C語言中,利用指針,將一個字元數字復制到另一個字元數組。為何運行不出來

錯誤有二:
(1)除申明變數處,其餘不能直接對字元串賦值,p="Another beautiful string";應改為

strcpy(p,"Another beautiful string");
(2)字元串q明顯比p短,而定義的strcpy函數*from應該比*to短才可以,否則會出現錯誤,若改成
strcpy(q,p)就可以了,另外p,q本身就是指針(地址變數),因此實參傳遞時不能加*

❾ C語言中使用指針但是最後輸入信息就變成無法運行,(代碼如下)可能是指針問題或者編譯器的問題

main中指針p沒有初始化,把char *p改成
char *str[1000],*p=str;即代碼改成如下:
#include<stdio.h>
#include<string.h>
int isPalindrome(char *str)
{
int i,j;
for(i=0,j=strlen(str)-1;i<=j;i++,j--)
{
if(*(str+i)!=*(str+j)) return 0;
}
return 1;
}
int main()
{
char str[1000],*p=str;
gets(p);
if(isPalindrome(p)) printf("是");
else printf("否");
return 0;
}

❿ C語言指針問題,為什麼不能運行呢。

不知道你在程序中的意圖,猜測是字元指針傳遞地址傳遞到函數並實現在函數體內改變原字元指針的指向,根據這一點,程序只需要改一點:
int fun(char *a,char b,char *pa){
==>
int fun(char *a,char b,char **pa){
因為你在main()中定義的char *p是沒有存儲空間的,*pa=a+1會導致嚴重錯誤,以下代碼實現你的設想,在Turbo C 2.0調試通過,希望對你有幫助:

#include <stdio.h>
#include <alloc.h>
int fun(char *a,char b,char **pa){
int i;
for(i=0;a[i];i++){
if(a[i]==b){
*pa=a+i;
return 0;
}
}
*pa=0;
return 0;
}
void main(){
char a[]="abcdefg",b='h';
char *p;
fun(a,b,&p);
printf("%c\n",*p);
}