C 寻址方法

问题描述 投票:0回答:1
#include <stdio.h>
#include <stdlib.h>
#define can 100
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 void hesaplacumle(int *sayi,char dizi[can])
 {
    *sayi=strlen(dizi);
    printf("Karakter dizimin boyu: %d\n",*sayi);
    
 }
 void ortakhesap(int *ortak,char dizi1[can])
 {
     *ortak=0;
 int i=0;
  int konum=0;
  int num1[26]={0};
  int num2[26]={0};
  while(dizi1[i])
  {
    if(dizi1[i]==32)
      {
        break;
      }
    else if(dizi1[i]>96 && dizi1[i]<123)
    {
        konum=dizi1[i]-'a';
        num1[konum]++;
    }
    i++;
  }
   i+=1;
    while(dizi1[i])
  {
    
    if(dizi1[i]>96 && dizi1[i]<123)
    {
        konum=dizi1[i]-'a';
        num2[konum]++;
    }
    else{
        break;
    }
     
     
    i++;
  }

 
    for(i=0;i<26;i++)
    {
    if(num1[i]!=0 && num2[i]!=0)
    {
        *ortak++;
    }
    }
    printf("2 kelimenin ortak harf sayisi: %d",*ortak);
 }
int main(int argc, char *argv[]) 
{
    int ortak;
  char dizi[100];
  char dizi1[100];
  int sayi;
  printf("\nLutfen bir cumle giriniz: \n");
  gets(dizi);
  hesaplacumle(&sayi,dizi);
  
  printf("\nLutfen iki kelime giriniz: \n\n");
  gets(dizi1);
  
  
  ortakhesap(&ortak,dizi1);
 
  
    
}

hesaplacumle(&sayi,dizi);我期望这个函数有完全相同的输出,这是可以的。但是, ortakhesap(&ortak,dizi1);当我在不使用函数的情况下尝试这个时,它可以正常工作。另一方面,当我使用函数尝试它时,它会产生我不理解的相同荒谬的输出。这里我的问题是我缺少什么?主要思想是使用寻址方法.感谢您的帮助。致以我的敬意。

hesaplacumle(&sayi,dizi) 这个计算句子的长度。 ortakhesap(&ortak,dizi1);这个计算两个单词之间的公共字符数。

c char addressing
1个回答
0
投票

功能

ortakhesap()
的问题在这里:

        *ortak++;

您打算增加

int
指向的
ortak
,但后缀
++
的优先级高于一元
*
运算符,因此您要增加指针本身,然后取消引用它并丢弃该值。您可以通过插入括号来实现您的意图...

        (*ortak)++;

...或使用加号代替增量运算符...

        *ortak += 1;

。然而,更好的方法是使用函数的返回值而不是输出参数,或者至少使用局部变量来累积计数,并在最后仅设置一次

*ortak

© www.soinside.com 2019 - 2024. All rights reserved.